home *** CD-ROM | disk | FTP | other *** search
- #!/usr/bin/perl
- #
- #
- # kde2wmaker.pl:
- #
- #
- # This script, made for users of Window Maker (http://windowmaker.org) is to
- # be used along with KDE (http://www.kde.org).
- #
- #
- # The default directory, ~/.kde/share/applnk/apps, will contain various
- # sub-directories such as Development, Editors, Internet, etc. If for some
- # reason, you wish to use an alternate (parent) directory that contains the
- # various AppName.kdelnk files, it can be specified on the command line.
- #
- # The directory, if an alternate is specified, MUST be a parent directory to
- # any/all sub-directories.
- #
- # Command line usage:
- # -d <KDE App.kdelnk dir> -f <output menufile> -s yes (print to STDOUT)
- #
- # Example command with args:
- # -d ~/.kde/share/applnk -f ~/.kde2wmaker.menu -s yes
- #
- # When the script is run, it will write out a proper Window Maker "External
- # Menu" entry, that can be included in the menu. When the External Menu has
- # been correctly configured, the root menu will display a sub-menu containing
- # all of the KDE related items found. The script only needs to be run when/if
- # KDE is updated.
- #
- #
- # Installation and Configuration:
- #
- # 1) If /usr/bin/perl is not the location of the perl binary on your system,
- # the first line should be changed to reflect upon it's location.
- # 2) Run the script.
- # 3) Configure Window Maker's menu by editing ~/GNUstep/Defaults/WMRootMenu
- # This could be done with any text editor, or by using WPrefs. Insert
- # the following line (if done with a text editor) into the WMRootMenu file.
- # ("External Menu", OPEN_MENU, "$HOME/.kde2wmaker.menu"),
- # If done using WPrefs, simply "Add External Menu" from the drop down menu,
- # then type: $HOME/.kde2wmaker.menu into the "Menu Path/Directory List"
- # textbox.
- # 4) Some KDE entries, such as "Pine" will require a terminal to execute it.
- # There is a terminal varable below. You may use any terminal, XTerm is the
- # default. Any command line options such as: -fg -bg, etc. can be
- # specified in this variable as well.
- #
- #
- # Michael Hokenson - logan@dct.com
-
-
- ###
- ### Variables
- ###
-
- ### The External Menu file, this should NEVER point to the root menu file
- $menufile = "$ENV{'HOME'}/.kde2wmaker.menu";
-
- ### Base directory, location of all the KDE AppName.kdelnk files
- $basedir = "$ENV{'HOME'}/.kde/share/applnk/apps";
-
- ### Terminal to use
- $term = "xterm";
-
- ### Print to STDOUT, default is YES, a filename is specified
- $stdout = 1;
-
-
- ###
- ### Begin work
- ###
-
- ### Process command line arguments
- foreach $arg(@ARGV) {
- if($last) {
- if($last eq "-d") {
- $basedir = $arg;
- } elsif($last eq "-f") {
- $menufile = $arg;
- $stdout = 0;
- }
- undef($last);
- } elsif($arg =~ /^-/) {
- if($arg =~ /^-[dfs]$/) {
- $last = $arg;
- } else {
- die("Unknown option: $arg\n\nUsage: kde2wmaker.pl\n\t-d <KDE App.kdelnk dir> [-f <output menufile>]\n");
- &Usage;
- }
- }
- }
-
- ### Make sure we actually exist
- if(-d $basedir) {
-
- ### Start some error checking
- $errors = 0;
-
- ### See if there is an old menu file. If there is, rename it
- unless($stdout) {
- if(-e $menufile) {
- print "\tFound $menufile, renaming\n\n";
- rename $menufile, "$menufile.old";
- }
- }
-
- ### Read in the directories
- opendir(KDE,$basedir);
- @dirs = readdir(KDE);
- closedir(KDE);
-
- ### Make sure there is actually something in $basedir
- if($#dirs <= 1) {
- print "ERROR:\n\tNothing found in $basedir\n\n";
- exit(0);
- }
-
- ### Begin writing the menu
- unless($stdout) {
- open(MENUFILE,"> $menufile");
- }
-
- ### Start the main menu entry
- if($stdout) {
- print "\t\"KDE Applications\" MENU\n";
- } else {
- print MENUFILE "\t\"KDE Applications\" MENU\n";
- }
-
- ### Begin processing the directories
- foreach $dir(@dirs) {
-
- ### Handle each directory unless if its hidden (starts with .)
- unless($dir =~ /^\./) {
- ### Print out the sub directories
- if($stdout) {
- print "\t\t\"$dir\" MENU\n";
- } else {
- print MENUFILE "\t\t\"$dir\" MENU\n";
- }
-
- ### Look in each directory and process individual files
- opendir(SUB,"$basedir/$dir");
- @subdirs = readdir(SUB);
- closedir(SUB);
-
- ### Process files in each sub directory
- foreach $sub(@subdirs) {
-
- ### Once again, process all files but those that are hidden
- unless($sub =~ /^\./) {
-
- ### Open the files
- open(SUB,"$basedir/$dir/$sub");
-
- ### Search through the contents of the file
- while($line = <SUB>) {
- chop($line);
- ### Grab the name
- if($line =~ /^Name=/) {
- $pname = $line;
- $pname =~ s/Name=//;
- }
- ### Grab the command
- if($line =~ /^Exec=/) {
- $pargs = $line;
- $pargs =~ s/Exec=//;
- }
- ### If Terminal=1, then we need to execute a term
- if($line =~ /^Terminal=1$/) {
- $pargs = "$term -T \"$pname\" -e $pargs";
- }
- }
-
- close(SUB);
-
- ### Some error checking on the Name and Exec
- if($pname eq "") {
- $pname = $sub;
- $pname =~ s/\.kdelnk//;
- }
- if($pargs eq "") {
- $error = 1;
- $pargs = $sub;
- $pargs =~ s/\.kdelnk//;
- print "WARNING:\n\tNo Exec for $pname, using $pargs\n";
- }
-
- ### Begin printing menu items
- if($stdout) {
- print "\t\t\t\"$pname\" EXEC $pargs\n";
- } else {
- print MENUFILE "\t\t\t\"$pname\" EXEC $pargs\n";
- }
- }
- }
-
- ### Print the end of the sub menu
- if($stdout) {
- print "\t\t\"$dir\" END\n";
- } else {
- print MENUFILE "\t\t\"$dir\" END\n";
- }
- }
- }
-
- ### Finish off the main menu entry
- if($stdout) {
- print "\t\"KDE Applications\" END\n";
- } else {
- print MENUFILE "\t\"KDE Applications\" END\n";
- }
-
- unless($stdout) {
- close(MENUFILE);
- }
-
- ### Yaya!
- if($errors) {
- print "\n.. Finished. There were errors.\n";
- }
- # else {
- # print "\n.. Finished.\n";
- # }
-
- exit(0);
- } else {
- ### Error out :/
- print "ERROR:\n\t$basedir not found\n\tTry another directory.\n";
- exit(0);
- }
-
- ###
- ### End work :))
- ###
-